// 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。

//方法一：暴力遍历+set去重
// let lengthOfLongestSubstring = function(str) {
//     let max = 1;
//     let temp = 0;
//     let arr = Array.from(str);
//     if (arr.length == 0) { return 0 }
//     for (let i = 0; i < arr.length; i++) {
//         let set = new Set();
//         let j = i;
//         while (j < arr.length && !set.has(arr[j])) {
//             set.add(arr[j]);
//             j++;
//         }
//         temp = set.size;
//         max = Math.max(max, temp);
//     }
//     return max;
// }

//方法二：滑动窗口
//基本原理：没有重复则右边扩张，出现重复则左边收缩，每次执行保留最大值
let lengthOfLongestSubstring = function(str) {
    let max = 1;
    let left = 0;
    let right = 1;
    let set = new Set();
    let arr = Array.from(str);
    if (arr.length == 0) { return 0 }
    while (left < arr.length) {
        while (right < arr.length && !set.has(arr[right])) {
            set.add(arr[right]);
            right++;
        }
        max = Math.max(max, right - left);
        set.delete(arr[left]);
        left++;
    }
    return max;
}
let string = 'abcabcdd';
console.log(lengthOfLongestSubstring(string))